package com.yuanheng100.asset.model.fixed;

import java.math.BigDecimal;
import java.util.List;

import com.yuanheng100.asset.consts.common.TimeDef.InstallmentUnit;
import com.yuanheng100.asset.model.Asset;
import com.yuanheng100.asset.model.fixed.borrower.Borrower;
import com.yuanheng100.asset.model.fixed.guarantee.Guarantee;
import com.yuanheng100.asset.model.fixed.invest.Invest;
import com.yuanheng100.asset.model.fixed.mortgage.Mortgage;
import com.yuanheng100.asset.model.fixed.repay.Repay;

/**
 * 这是固定收益类资产model的父类，继承自Asset类<br>
 * 每个资产信息，包含以下条目：<br>
 * <li> amount                      票面金额/借款金额
 * <li> annualInterestRate  票面年化收益率
 * <li> installmentCount    借款期限数量
 * <li> installmentUnit       借款期限计量单位
 * <li> Borrower                   借款人信息。
 * <li> Invest                        投资人信息。
 * <li> Repay                        还款信息。包括还款方式，还款分期
 * <li> mortgateList             抵押品信息
 * <li> guaranteeList          担保信息
 * @author 柏松
 */
public class FixedIncomeAsset extends Asset
{
	/**
	 * 票面金额/借款金额。以元为单位，精确到分位。如1000000.00
	 */
	private BigDecimal amount;
	
	/**
	 * 票面年化收益率，精确到小数点后4位小数。如8.32%的收益率，其值为0.0832
	 */
	private BigDecimal annualInterestRate;
	
	/**
	 * 借款期限数量
	 */
	private short installmentCount;
	
	/**
	 * 借款期限计量单位。如：天，月，年等
	 */
	private InstallmentUnit installmentUnit;
	
	/**
	 * 借款用途
	 */
	private String loanPurpose;
	
	/**
	 * 借款人信息
	 */
	private Borrower borrower;
	
	/**
	 * 投资信息
	 */
	private Invest invest;
	
	/**
	 * 还款信息
	 */
	private Repay repay;
	
	/**
	 * 抵押品信息
	 */
	private List<Mortgage> mortgateList;
	
	/**
	 * 担保信息
	 */
	private List<Guarantee> guaranteeList;

	
	/**
	 * @return the amount
	 */
	public BigDecimal getAmount()
	{
		return amount;
	}

	/**
	 * @param amount the amount to set
	 */
	public void setAmount(BigDecimal amount)
	{
		this.amount = amount;
	}

	/**
	 * @return the annualInterestRate
	 */
	public BigDecimal getAnnualInterestRate()
	{
		return annualInterestRate;
	}

	/**
	 * @param annualInterestRate the annualInterestRate to set
	 */
	public void setAnnualInterestRate(BigDecimal annualInterestRate)
	{
		this.annualInterestRate = annualInterestRate;
	}

	/**
	 * @return the borrower
	 */
	public Borrower getBorrower()
	{
		return borrower;
	}

	/**
	 * @param borrower the borrower to set
	 */
	public void setBorrower(Borrower borrower)
	{
		this.borrower = borrower;
	}

	/**
	 * @return the mortgateList
	 */
	public List<Mortgage> getMortgateList()
	{
		return mortgateList;
	}

	/**
	 * @param mortgateList the mortgateList to set
	 */
	public void setMortgateList(List<Mortgage> mortgateList)
	{
		this.mortgateList = mortgateList;
	}


	/**
     * @return the installmentCount
     */
    public short getInstallmentCount()
    {
        return installmentCount;
    }

    /**
     * @param installmentCount the installmentCount to set
     */
    public void setInstallmentCount(short installmentCount)
    {
        this.installmentCount = installmentCount;
    }

    /**
     * @return the installmentUnit
     */
    public InstallmentUnit getInstallmentUnit()
    {
        return installmentUnit;
    }

    /**
     * @param installmentUnit the installmentUnit to set
     */
    public void setInstallmentUnit(InstallmentUnit installmentUnit)
    {
        this.installmentUnit = installmentUnit;
    }

    /**
     * @return the repay
     */
    public Repay getRepay()
    {
        return repay;
    }

    /**
     * @param repay the repay to set
     */
    public void setRepay(Repay repay)
    {
        this.repay = repay;
    }

    /**
	 * @return the guaranteeList
	 */
	public List<Guarantee> getGuaranteeList()
	{
		return guaranteeList;
	}

	/**
	 * @param guaranteeList the guaranteeList to set
	 */
	public void setGuaranteeList(List<Guarantee> guaranteeList)
	{
		this.guaranteeList = guaranteeList;
	}

    /**
     * @return the loanPurpose
     */
    public String getLoanPurpose()
    {
        return loanPurpose;
    }

    /**
     * @param loanPurpose the loanPurpose to set
     */
    public void setLoanPurpose(String loanPurpose)
    {
        this.loanPurpose = loanPurpose;
    }

    /**
     * @return the invest
     */
    public Invest getInvest()
    {
        return invest;
    }

    /**
     * @param invest the invest to set
     */
    public void setInvest(Invest invest)
    {
        this.invest = invest;
    }

}
